# Python 常用数据结构

# 1. 列表 List
# 列表是 Python 中最常用的数据结构。列表可以存储多个元素，每个元素可以是任意类型，包括数字、字符串、列表、元组、字典等。
# 列表的索引从 0 开始，可以随时添加或删除元素。

# 创建列表
my_list = [1, 2, 3, 4, 5]

# 访问列表元素
print(my_list[0])  # 获取列表第一个元素 输出 1
print(my_list[1:3])  # 获取列表下标为第二个到第三个(不包含)元素 输出 [2, 3]
print(my_list[-2:]) # 获取列表倒数第二个到最后一个元素 输出 [4, 5]
print(my_list[:3])  # 获取列表前三个元素 输出 [1, 2, 3]
print(my_list[1:-2]) # 获取列表第二个到倒数第二个(不包含)元素 输出 [2, 3]

# 列表方法
my_list.append(6)  # 在列表末尾添加元素
print(my_list)
my_list.insert(1, 7)  # 在索引 1 处插入元素 7
print(my_list)
my_list.remove(2)  # 删除值为 2 的元素
print(my_list)
my_list.pop()  # 删除列表末尾元素
print(my_list)
my_list.sort()  # 排序列表元素
print(my_list)
my_list.reverse()  # 反转列表元素
print(my_list)

print(len(my_list))  # 列表长度

# 列表切片
my_list = [1, 2, 3, 4, 5]
my_list[1:3] = [7, 8]  # 切片赋值
print(my_list)

# 列表遍历
for i in my_list:
    print(i)

# 列表生成式
my_list = [i for i in range(1, 6)]
print(my_list)

# 列表推导式
my_list = [i**2 for i in range(1, 6)]
print(my_list)


# 2. 元组 Tuple

# 元组与列表类似，不同之处在于元组的元素不能修改。

# 创建元组
my_tuple = (1, 2, 3, 4, 5)

# 访问元组元素
print(my_tuple[0])  # 获取元组第一个元素 输出 1
print(my_tuple[1:3])  # 获取元组下标为第二个到第三个(不包含)元素 输出 (2, 3)
print(my_tuple[-2:]) # 获取元组倒数第二个到最后一个元素 输出 (4, 5)
print(my_tuple[:3])  # 获取元组前三个元素 输出 (1, 2, 3)
print(my_tuple[1:-2]) # 获取元组第二个到倒数第二个(不包含)元素 输出 (2, 3)

# 元组方法
my_tuple.count(2)  # 统计元组中值为 2 的元素个数 输出 1
my_tuple.index(3)  # 获取元组中值为 3 的元素的索引 输出 2


# 3. 集合 Set
# 集合是 Python 中另一种非常有用的数据结构。集合是一个无序不重复元素的集。

# 创建集合
my_set = {1, 2, 3, 4, 5}

# 访问集合元素
print(my_set[0])  # 获取集合第一个元素 输出 1
print(my_set[1:3])  # 获取集合下标为第二个到第三个(不包含)元素 输出 {2, 3}
print(my_set[-2:]) # 获取集合倒数第二个到最后一个元素 输出 {4, 5}
print(my_set[:3])  # 获取集合前三个元素 输出 {1, 2, 3}
print(my_set[1:-2]) # 获取集合第二个到倒数第二个(不包含)元素 输出 {2, 3}

# 集合方法
my_set.add(6)  # 在集合中添加元素
print(my_set)
my_set.remove(2)  # 从集合中删除值为 2 的元素
print(my_set)
my_set.pop()  # 从集合中随机删除一个元素
print(my_set)
my_set.clear()  # 清空集合
print(my_set)

print(len(my_set))  # 集合长度

# 集合运算
my_set1 = {1, 2, 3}
my_set2 = {2, 3, 4}
print(my_set1 & my_set2)  # 交集 输出 {2, 3}
print(my_set1 | my_set2)  # 并集 输出 {1, 2, 3, 4}
print(my_set1 - my_set2)  # 差集 输出 {1}
print(my_set1 ^ my_set2)  # 对称差集 输出 {1, 4}

# 集合推导式
my_set = {i for i in range(1, 6)}
print(my_set)

# 集合推导式也可以用于字典的键值对
my_dict = {i: i**2 for i in range(1, 6)}
print(my_dict)


# 4. 字典 Dict
# 字典是 Python 中另一种常用的数据结构。字典是一个无序的键值对的集合。

# 创建字典
my_dict = {'name': 'Alice', 'age': 20, 'city': 'Beijing'}

# 访问字典元素
print(my_dict['name'])  # 获取字典键为 'name' 的值 输出 Alice
print(my_dict.get('age'))  # 获取字典键为 'age' 的值 输出 20
print(my_dict.get('gender', 'Unknown'))  # 获取字典键为 'gender' 的值，如果不存在则返回 'Unknown' 输出 Unknown

# 字典方法
my_dict['gender'] = 'Female'  # 添加或修改字典元素
print(my_dict)
del my_dict['age']  # 删除字典元素
print(my_dict)
my_dict.clear()  # 清空字典
print(my_dict)
print(len(my_dict))  # 字典长度

# 字典遍历
for key in my_dict:
    print(key, my_dict[key])

# 字典推导式
my_dict = {i: i**2 for i in range(1, 6)}
print(my_dict)

# 字典推导式也可以用于列表的元素
my_list = [i**2 for i in range(1, 6)]
print(my_list)